package internal

import (
	"golang.org/x/text/cases"
	"golang.org/x/text/language"
	"strings"
)

// 数据表名转成struct名
func TableNameToStructName(tableName string, ignoreTablePrefix bool, suffix string) string {
	parts := strings.Split(tableName, "_")
	caser := cases.Title(language.Und)
	length := len(parts)
	realParts := make([]string, 0)
	for i, part := range parts {
		if ignoreTablePrefix && i == 0 && length > 1 {
			continue
		}
		realParts = append(realParts, caser.String(part))
	}
	s := strings.Join(realParts, "")
	if suffix != "" {
		s = s + suffix
	}
	return s
}

// TablePrefixFromName 根据表名获取表的前缀。
// 该函数主要用于处理命名规范中的表名，通过表名中的下划线来分割并获取前缀。
// 参数:
//
//	tableName: 完整的表名字符串。
//
// 返回值:
//
//	返回表名的第一个部分作为表前缀。如果没有下划线或表名为空，则返回空字符串
func TablePrefixFromName(tableName string) string {
	parts := strings.Split(tableName, "_")
	if len(parts) <= 1 {
		return ""
	}
	return parts[0]
}

func FileNameFromTable(tableName string, ignoreTablePrefix bool, tablePrefix string) string {
	if !ignoreTablePrefix {
		return tableName
	}
	return strings.Replace(tableName, tablePrefix+"_", "", 1)
}
